package jobs;

// 抽象关卡类（模板方法模式）
abstract class GameLevel {
    // 模板方法，定义通用流程
    public final void playLevel() {
        prepare();
        start();
        play();
        judge();
        end();
    }
    // 通用步骤
    protected void prepare() {
        System.out.println("关卡准备中...");
    }
    protected void start() {
        System.out.println("关卡开始！");
    }
    // 可变步骤，由子类实现
    protected abstract void play();
    // 可变步骤，子类可重写
    protected void judge() {
        System.out.println("判定结果：通关！");
    }
    protected void end() {
        System.out.println("关卡结束\n");
    }
}

// 简单关卡
class EasyLevel extends GameLevel {
    @Override
    protected void play() {
        System.out.println("简单关卡：怪物移动慢，易于击败。");
    }
    // 继承默认judge
}

// 困难关卡
class HardLevel extends GameLevel {
    @Override
    protected void play() {
        System.out.println("困难关卡：怪物移动快，攻击力高。");
    }
    @Override
    protected void judge() {
        System.out.println("判定结果：只有得分超过100才能通关！");
    }
}

// 测试类
public class GameLevelTest {
    public static void main(String[] args) {
        GameLevel easy = new EasyLevel();
        GameLevel hard = new HardLevel();
        System.out.println("--- 简单关卡流程 ---");
        easy.playLevel();
        System.out.println("--- 困难关卡流程 ---");
        hard.playLevel();
    }
}
